--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Taskfile.yml 3f7ef731b5effd9aa3a81eceea66fd6c2b56498c (3f7ef731) Text, 30.51 KB
Tff7b72versionTb4b4b4: Ta5d6ff"Ta5d6ff3Ta5d6ff"
Tff7b72outputTb4b4b4: Ta5d6ffprefixed
Tff7b72varsTb4b4b4:
Tff7b72PYTHONTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${PYTHON:-python}"
Tff7b72NPMTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${NPM:-pnpm}"
Tff7b72NPM_INSTALL_FLAGSTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ff'Ta5d6ffifTe6edf3 Ta5d6ff[Te6edf3 Ta5d6ff"${MESHCHATX_OFFLINE_BUILD}"Te6edf3 Ta5d6ff=Te6edf3 Ta5d6ff"1"Te6edf3 Ta5d6ff];Te6edf3 Ta5d6ffthenTe6edf3 Ta5d6ffechoTe6edf3 Ta5d6ff"--offline";Te6edf3 Ta5d6ffelseTe6edf3 Ta5d6ffechoTe6edf3 Ta5d6ff"";Te6edf3 Ta5d6fffiTa5d6ff'
Tff7b72UV_SYNC_FLAGSTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ff'Ta5d6ffifTe6edf3 Ta5d6ff[Te6edf3 Ta5d6ff"${MESHCHATX_OFFLINE_BUILD}"Te6edf3 Ta5d6ff=Te6edf3 Ta5d6ff"1"Te6edf3 Ta5d6ff];Te6edf3 Ta5d6ffthenTe6edf3 Ta5d6ffechoTe6edf3 Ta5d6ff"--offline";Te6edf3 Ta5d6ffelseTe6edf3 Ta5d6ffechoTe6edf3 Ta5d6ff"";Te6edf3 Ta5d6fffiTa5d6ff'
Tff7b72LEGACY_ELECTRON_VERSIONTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${LEGACY_ELECTRON_VERSION:-30.0.8}"
Tff7b72WINE_PYTHONTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${WINE_PYTHON:-wineTa5d6ff Ta5d6ffC:/Python314/python.exe}"
Tff7b72DOCKER_COMPOSE_CMDTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${DOCKER_COMPOSE_CMD:-dockerTa5d6ff Ta5d6ffcompose}"
Tff7b72DOCKER_COMPOSE_FILETb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${DOCKER_COMPOSE_FILE:-docker-compose.yml}"
Tff7b72DOCKER_IMAGETb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${DOCKER_IMAGE:-reticulum-meshchatx:local}"
Tff7b72DOCKER_BUILDERTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${DOCKER_BUILDER:-meshchatx-builder}"
Tff7b72DOCKER_PLATFORMSTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${DOCKER_PLATFORMS:-linux/amd64}"
Tff7b72DOCKER_BUILD_FLAGSTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${DOCKER_BUILD_FLAGS:---load}"
Tff7b72DOCKER_BUILD_ARGSTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${DOCKER_BUILD_ARGS:-}"
Tff7b72DOCKER_CONTEXTTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${DOCKER_CONTEXT:-.}"
Tff7b72DOCKERFILETb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${DOCKERFILE:-Dockerfile}"
Tff7b72DOCKER_BUILD_IMAGETb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${DOCKER_BUILD_IMAGE:-reticulum-meshchatx-build:local}"
Tff7b72DOCKER_BUILD_FILETb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${DOCKER_BUILD_FILE:-Dockerfile.build}"
Tff7b72ANDROID_DIRTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${ANDROID_DIR:-android}"
Tff7b72PYTHON_SRC_DIRTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${PYTHON_SRC_DIR:-${ANDROID_DIR}/app/src/main/python}"
Tff7b72JNI_LIBS_DIRTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${JNI_LIBS_DIR:-${ANDROID_DIR}/app/src/main/jniLibs}"
Tff7b72RETICULUM_RNS_SRCTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${RETICULUM_RNS_SRC:-./misc/RNS}"
Tff7b72RETICULUM_LXMF_SRCTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${RETICULUM_LXMF_SRC:-./misc/LXMF}"
Tff7b72RETICULUM_LXST_SRCTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${RETICULUM_LXST_SRC:-./misc/LXST}"
Tff7b72SIDEBAND_CODEC2_WHLTb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${SIDEBAND_CODEC2_WHL:-./misc/pycodec2-3.0.1-cp311-cp311-linux_aarch64.whl}"
Tff7b72SIDEBAND_LIB_ARM64Tb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${SIDEBAND_LIB_ARM64:-./misc/libcodec2-arm64-v8a.so}"
Tff7b72SIDEBAND_LIB_ARMEABITb4b4b4:
Tff7b72shTb4b4b4: Ta5d6ffechoTa5d6ff Ta5d6ff"${SIDEBAND_LIB_ARMEABI:-./misc/libcodec2-armeabi-v7a.so}"
Tff7b72tasksTb4b4b4:
Tff7b72defaultTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffShowTa5d6ff Ta5d6ffavailableTa5d6ff Ta5d6fftasks
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6fftaskTa5d6ff Ta5d6ff--list
T8b949e# --- Initialization & Dependencies ---
Tff7b72installTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffallTa5d6ff Ta5d6ffdependenciesTa5d6ff Ta5d6ff(frontendTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffbackend)
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3depsTb4b4b4:Te6edf3frontendTb4b4b4, Te6edf3depsTb4b4b4:Te6edf3backendTb4b4b4]
Tff7b72install:offlineTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6fffromTa5d6ff Ta5d6ffofflineTa5d6ff Ta5d6ffbundleTa5d6ff Ta5d6ff(air-gappedTa5d6ff Ta5d6ffmachine)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffbashTa5d6ff Ta5d6ffscripts/install-offline.sh
Tff7b72bundle:offlineTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffCreateTa5d6ff Ta5d6ffofflineTa5d6ff Ta5d6ffbundleTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffair-gappedTa5d6ff Ta5d6ffbuildsTa5d6ff Ta5d6ff(onlineTa5d6ff Ta5d6ffmachineTa5d6ff Ta5d6ffonly)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffbashTa5d6ff Ta5d6ffscripts/create-offline-bundle.sh
Tff7b72setup:wineTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffSetupTa5d6ff Ta5d6ffWineTa5d6ff Ta5d6ffenvironmentTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffWindowsTa5d6ff Ta5d6ffcross-builds
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff./scripts/setup_wine_env.sh
Tff7b72deps:frontendTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3depsTb4b4b4:Te6edf3feTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffNode.jsTa5d6ff Ta5d6ffdependencies
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff'Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffinstall{{ifTe6edf3 Ta5d6ffneTe6edf3 Ta5d6ff.NPM_INSTALL_FLAGSTe6edf3 Ta5d6ff""}}Te6edf3 Ta5d6ff{{.NPM_INSTALL_FLAGS}}{{end}}Ta5d6ff'
Tff7b72deps:backendTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3depsTb4b4b4:Te6edf3beTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffPythonTa5d6ff Ta5d6ffdependenciesTa5d6ff Ta5d6ffusingTa5d6ff Ta5d6ffUV
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff'Ta5d6ffuvTe6edf3 Ta5d6ffsyncTe6edf3 Ta5d6ff--groupTe6edf3 Ta5d6ffdev{{ifTe6edf3 Ta5d6ffneTe6edf3 Ta5d6ff.UV_SYNC_FLAGSTe6edf3 Ta5d6ff""}}Te6edf3 Ta5d6ff{{.UV_SYNC_FLAGS}}{{end}}Ta5d6ff'
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpythonTa5d6ff Ta5d6ffscripts/patch_lxst_pyogg_ogg_ctypes.py
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpythonTa5d6ff Ta5d6ffscripts/patch_lxst_codec2_optional.py
Tff7b72deps:backend:rnsTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3depsTb4b4b4:Te6edf3beTb4b4b4:Te6edf3rnsTb4b4b4, Te6edf3pip-rnsTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffInstallTa5d6ff Ta5d6ffrns/lxmf/lxstTa5d6ff Ta5d6ffoverTa5d6ff Ta5d6ffRNSTa5d6ff Ta5d6ffviaTa5d6ff Ta5d6ffpip-rnsTa5d6ff Ta5d6ff(Optional,Ta5d6ff Ta5d6ffslow,Ta5d6ff Ta5d6ffPyPITa5d6ff Ta5d6ffisTa5d6ff Ta5d6ffdefault)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffechoTa5d6ff Ta5d6ff"WarningTa5d6ff Ta5d6ff-Ta5d6ff Ta5d6ffInstallingTa5d6ff Ta5d6ffpackagesTa5d6ff Ta5d6ffoverTa5d6ff Ta5d6ffRNSTa5d6ff Ta5d6ffviaTa5d6ff Ta5d6ffpip-rnsTa5d6ff Ta5d6ffisTa5d6ff Ta5d6ffslow.Ta5d6ff Ta5d6ffUseTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffmesh-onlyTa5d6ff Ta5d6ffenvironments."
Tb4b4b4- Ta5d6ffbashTa5d6ff Ta5d6ffscripts/pip-rns-deps.shTa5d6ff Ta5d6ff{{.CLI_ARGS}}
Tff7b72deps:git-pinsTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3depsTb4b4b4:Te6edf3pinsTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffFailTa5d6ff Ta5d6ffifTa5d6ff Ta5d6ffgithub/gitTa5d6ff Ta5d6ffdepsTa5d6ff Ta5d6fforTa5d6ff Ta5d6ffWASMTa5d6ff Ta5d6ffdownloadTa5d6ff Ta5d6ffURLsTa5d6ff Ta5d6ffdriftTa5d6ff Ta5d6fffromTa5d6ff Ta5d6ffscripts/deps-allowlist.json
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffnodeTa5d6ff Ta5d6ffscripts/check-git-deps.mjs
Tff7b72deps:whyTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffExplainTa5d6ff Ta5d6ffwhyTa5d6ff Ta5d6ffaTa5d6ff Ta5d6ffpackageTa5d6ff Ta5d6ffisTa5d6ff Ta5d6ffinstalledTa5d6ff Ta5d6ff(pnpmTa5d6ff Ta5d6ffwhyTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffuvTa5d6ff Ta5d6fftreeTa5d6ff Ta5d6ff--package)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tb4b4b4|
Tff7b72PKG="{{.CLI_ARGS}}"
Tff7b72if [ -z "$PKG" ]; then
Tff7b72echo "Usage: task deps:why -- <package>" >&2
Tff7b72exit 1
Tff7b72fi
Tff7b72echo "=== pnpm why ${PKG} ==="
Tff7b72{{.NPM}} why "$PKG" || true
Tff7b72echo
Tff7b72echo "=== uv tree --package ${PKG} --invert ==="
Tff7b72uv tree --package "$PKG" --invert || true
Tff7b72check:format-tokensTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffFailTa5d6ff Ta5d6ffifTa5d6ff Ta5d6ffformatDate/meshDateTa5d6ff Ta5d6ffpatternsTa5d6ff Ta5d6ffuseTa5d6ff Ta5d6ffunsupportedTa5d6ff Ta5d6ffdatetimeTa5d6ff Ta5d6fftokens
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffnodeTa5d6ff Ta5d6ffscripts/check-format-tokens.mjs
Tff7b72licenses:refreshTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRegenerateTa5d6ff Ta5d6ffembeddedTa5d6ff Ta5d6fflicenseTa5d6ff Ta5d6ffartifactsTa5d6ff Ta5d6ffandTa5d6ff Ta5d6fffailTa5d6ff Ta5d6ffifTa5d6ff Ta5d6fftheTa5d6ff Ta5d6fftreeTa5d6ff Ta5d6ffisTa5d6ff Ta5d6ffdirtyTa5d6ff Ta5d6ffafterward
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpythonTa5d6ff Ta5d6ff-mTa5d6ff Ta5d6ffmeshchatx.src.backend.licenses_collectorTa5d6ff Ta5d6ff--write-artifacts
Tb4b4b4- Tb4b4b4|
Tff7b72if ! git diff --quiet -- \
Tff7b72meshchatx/src/backend/data/licenses_frontend.json \
Tff7b72meshchatx/src/backend/data/licenses_backend.json \
Tff7b72meshchatx/src/backend/data/THIRD_PARTY_NOTICES.txt
Tff7b72then
Tff7b72echo "licenses:refresh left a dirty tree. Commit the updated license artifacts." >&2
Tff7b72git status --short -- \
Tff7b72meshchatx/src/backend/data/licenses_frontend.json \
Tff7b72meshchatx/src/backend/data/licenses_backend.json \
Tff7b72meshchatx/src/backend/data/THIRD_PARTY_NOTICES.txt >&2
Tff7b72exit 1
Tff7b72fi
Tff7b72echo "licenses:refresh: artifacts up to date"
Tff7b72docs:rnsTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3build-docsTb4b4b4:Te6edf3rnsTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffFetchTa5d6ff Ta5d6ffReticulumTa5d6ff Ta5d6ffmanualTa5d6ff Ta5d6fffromTa5d6ff Ta5d6ffrngitTa5d6ff Ta5d6ffwebsiteTa5d6ff Ta5d6ffremoteTa5d6ff Ta5d6ffoverTa5d6ff Ta5d6ffRNS
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tb4b4b4>Tb4b4b4-
Tff7b72uv run python scripts/build/fetch_reticulum_manual.py
Tff7b72--force --via-rns
Tff7b72{{.CLI_ARGS}}
Tff7b72setup:beTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffFullTa5d6ff Ta5d6ffbackendTa5d6ff Ta5d6ffenvironmentTa5d6ff Ta5d6ffsetup
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff'Ta5d6ffuvTe6edf3 Ta5d6ffsyncTe6edf3 Ta5d6ff--groupTe6edf3 Ta5d6ffdev{{ifTe6edf3 Ta5d6ffneTe6edf3 Ta5d6ff.UV_SYNC_FLAGSTe6edf3 Ta5d6ff""}}Te6edf3 Ta5d6ff{{.UV_SYNC_FLAGS}}{{end}}Ta5d6ff'
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpythonTa5d6ff Ta5d6ffscripts/patch_lxst_pyogg_ogg_ctypes.py
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpythonTa5d6ff Ta5d6ffscripts/patch_lxst_codec2_optional.py
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpipTa5d6ff Ta5d6ffinstallTa5d6ff Ta5d6ffruff
T8b949e# --- Execution ---
Tff7b72runTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6fftheTa5d6ff Ta5d6ffapplication
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3installTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpythonTa5d6ff Ta5d6ff-mTa5d6ff Ta5d6ffmeshchatx.meshchat
Tff7b72devTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffViteTa5d6ff Ta5d6ffHMRTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6ffbackendTa5d6ff Ta5d6ff(http://localhost:5173)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffbashTa5d6ff Ta5d6ffscripts/dev-local.sh
Tff7b72dev-feTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffViteTa5d6ff Ta5d6ffdevTa5d6ff Ta5d6ffserverTa5d6ff Ta5d6ffonlyTa5d6ff Ta5d6ff(pairTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6fftaskTa5d6ff Ta5d6ffrun)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffdevTe6edf3 Ta5d6ff--Te6edf3 Ta5d6ff--hostTe6edf3 Ta5d6ff127.0.0.1Te6edf3 Ta5d6ff--portTe6edf3 Ta5d6ff5173Ta5d6ff"
Tff7b72startTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6fftheTa5d6ff Ta5d6ffapplicationTa5d6ff Ta5d6ffviaTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffForge
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffstartTa5d6ff"
Tff7b72packageTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffPackageTa5d6ff Ta5d6fftheTa5d6ff Ta5d6ffapplicationTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffForge
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffpackageTa5d6ff"
Tff7b72makeTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffGenerateTa5d6ff Ta5d6ffdistributablesTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffForge
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffmakeTa5d6ff"
T8b949e# --- Code Quality ---
Tff7b72formatTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffFormatTa5d6ff Ta5d6ffallTa5d6ff Ta5d6ffcodeTa5d6ff Ta5d6ff(Prettier/ESLint,Ta5d6ff Ta5d6ffRuff)
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3fmtTb4b4b4, Te6edf3fmtTb4b4b4:Te6edf3allTb4b4b4]
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3formatTb4b4b4:Te6edf3frontendTb4b4b4, Te6edf3formatTb4b4b4:Te6edf3backendTb4b4b4]
Tff7b72format:frontendTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3fmtTb4b4b4:Te6edf3feTb4b4b4, Te6edf3formatTb4b4b4:Te6edf3feTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffFormatTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffcodeTa5d6ff Ta5d6ff(Prettier/ESLint)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffformatTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6fflint:fixTa5d6ff"
Tff7b72format:backendTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3fmtTb4b4b4:Te6edf3beTb4b4b4, Te6edf3formatTb4b4b4:Te6edf3beTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffFormatTa5d6ff Ta5d6ffPythonTa5d6ff Ta5d6ffcodeTa5d6ff Ta5d6ff(Ruff)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffruffTa5d6ff Ta5d6ffformatTa5d6ff Ta5d6ff.
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffruffTa5d6ff Ta5d6ffcheckTa5d6ff Ta5d6ff--fixTa5d6ff Ta5d6ff.
Tff7b72lintTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffallTa5d6ff Ta5d6fflintersTa5d6ff Ta5d6ff(ESLint,Ta5d6ff Ta5d6ffvue-tsc,Ta5d6ff Ta5d6ffknip,Ta5d6ff Ta5d6ffRuff,Ta5d6ff Ta5d6ffbasedpyright)
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3lintTb4b4b4:Te6edf3allTb4b4b4]
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3lintTb4b4b4:Te6edf3frontendTb4b4b4, Te6edf3lintTb4b4b4:Te6edf3backendTb4b4b4]
Tff7b72lint:frontendTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3lintTb4b4b4:Te6edf3feTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffLintTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffcodeTa5d6ff Ta5d6ff(ESLint,Ta5d6ff Ta5d6ffvue-tsc,Ta5d6ff Ta5d6ffknip,Ta5d6ff Ta5d6ffformat-tokenTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffgit-depTa5d6ff Ta5d6ffpinTa5d6ff Ta5d6ffchecks)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6fflintTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6fftypecheckTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffexecTe6edf3 Ta5d6ffknipTa5d6ff"
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6ffcheck:format-tokens
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6ffdeps:git-pins
Tff7b72lint:backendTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3lintTb4b4b4:Te6edf3beTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffLintTa5d6ff Ta5d6ffPythonTa5d6ff Ta5d6ffcodeTa5d6ff Ta5d6ff(RuffTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6ffbasedpyright)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffruffTa5d6ff Ta5d6ffcheckTa5d6ff Ta5d6ff.
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffruffTa5d6ff Ta5d6ffformatTa5d6ff Ta5d6ff--checkTa5d6ff Ta5d6ff.
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffbasedpyrightTa5d6ff Ta5d6ff-pTa5d6ff Ta5d6ffpyrightconfig.jsonTa5d6ff Ta5d6ff--levelTa5d6ff Ta5d6fferror
T8b949e# --- Testing & Analysis ---
Tff7b72testTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffallTa5d6ff Ta5d6fftests
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3testTb4b4b4:Te6edf3allTb4b4b4]
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3testTb4b4b4:Te6edf3backendTb4b4b4, Te6edf3testTb4b4b4:Te6edf3frontendTb4b4b4, Te6edf3testTb4b4b4:Te6edf3langTb4b4b4]
Tff7b72test:e2eTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffPlaywrightTa5d6ff Ta5d6ffE2ETa5d6ff Ta5d6ff(startsTa5d6ff Ta5d6ffMeshChatTa5d6ff Ta5d6ffbackendTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6ffVite,Ta5d6ff Ta5d6ffrequiresTa5d6ff Ta5d6ffuv,Ta5d6ff Ta5d6ffcurl,Ta5d6ff Ta5d6ffpnpmTa5d6ff Ta5d6ffexecTa5d6ff Ta5d6ffplaywrightTa5d6ff Ta5d6ffinstallTa5d6ff Ta5d6ffchromium)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6fftest:e2eTa5d6ff"
Tff7b72test:quickTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffFastTa5d6ff Ta5d6ffdevTa5d6ff Ta5d6ffloopTa5d6ff Ta5d6ff-Ta5d6ff Ta5d6ffregressionTa5d6ff Ta5d6ffsubsetTa5d6ff Ta5d6ff(setTa5d6ff Ta5d6ffE2E=1Ta5d6ff Ta5d6fftoTa5d6ff Ta5d6ffincludeTa5d6ff Ta5d6ffPlaywrightTa5d6ff Ta5d6ffsmoke)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6fftest:quick:be
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6fftest:quick:fe
Tb4b4b4- Tb4b4b4|
Tff7b72if [ "${E2E:-0}" = "1" ]; then
Tff7b72{{.NPM}} exec playwright test tests/e2e/smoke.spec.js
Tff7b72fi
Tff7b72test:quick:beTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBackendTa5d6ff Ta5d6ffregressionTa5d6ff Ta5d6ffsubsetTa5d6ff Ta5d6ff(interface-stats,Ta5d6ff Ta5d6ffCSRF,Ta5d6ff Ta5d6ffLXMFTa5d6ff Ta5d6ffsend,Ta5d6ff Ta5d6ffnomadTa5d6ff Ta5d6ffdownloads,Ta5d6ff Ta5d6ffRNSTa5d6ff Ta5d6fflink,Ta5d6ff Ta5d6ffEECTTa5d6ff Ta5d6ffpacks)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tb4b4b4>Tb4b4b4-
Tff7b72uv run pytest
Tff7b72tests/backend/test_interface_stats_endpoint.py
Tff7b72tests/backend/test_http_auth_security.py
Tff7b72tests/backend/test_meshchat_coverage.py
Tff7b72tests/backend/test_nomadnet_downloader.py
Tff7b72tests/backend/test_rns_link_manager.py
Tff7b72tests/backend/test_rns_link_fuzzing.py
Tff7b72tests/backend/test_rns_link_plugin.py
Tff7b72tests/backend/test_rns_filesync_security.py
Tff7b72-q
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6fftest:eect
Tff7b72test:eectTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffExtendedTa5d6ff Ta5d6ffEdgeTa5d6ff Ta5d6ffCaseTa5d6ff Ta5d6ffTesterTa5d6ff Ta5d6ffpacksTa5d6ff Ta5d6ff(seededTa5d6ff Ta5d6ffidentity/path/auth/hostile/scarcityTa5d6ff Ta5d6ffscenarios)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpytestTa5d6ff Ta5d6fftests/backend/eect/packsTa5d6ff Ta5d6ff-mTa5d6ff Ta5d6ffeectTa5d6ff Ta5d6ff-qTa5d6ff Ta5d6ff--tb=short
Tff7b72test:filesync:securityTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffAdversarialTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffHypothesisTa5d6ff Ta5d6fffuzzTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffRNSTa5d6ff Ta5d6ffFileSync
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpytestTa5d6ff Ta5d6fftests/backend/test_rns_filesync_security.pyTa5d6ff Ta5d6fftests/backend/test_rns_filesync_handler.pyTa5d6ff Ta5d6ff-qTa5d6ff Ta5d6ff--tb=short
Tff7b72test:lvTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffLiveTa5d6ff Ta5d6ffValidationTa5d6ff Ta5d6ffladderTa5d6ff Ta5d6ff(setTa5d6ff Ta5d6ffMESHCHAT_LIVE_VALIDATION=1Ta5d6ff Ta5d6ffforTa5d6ff Ta5d6ffL2-L3)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffMESHCHAT_LIVE_VALIDATION=1Ta5d6ff Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpytestTa5d6ff Ta5d6fftests/backend/eect/liveTa5d6ff Ta5d6ff-mTa5d6ff Ta5d6fflive_validationTa5d6ff Ta5d6ff-qTa5d6ff Ta5d6ff--tb=short
Tff7b72test:lv:l0Tb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffLiveTa5d6ff Ta5d6ffValidationTa5d6ff Ta5d6ffL0Ta5d6ff Ta5d6ffonlyTa5d6ff Ta5d6ff(imports/sqlite/unicode,Ta5d6ff Ta5d6ffCI-safe)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpytestTa5d6ff Ta5d6fftests/backend/eect/live/test_lv_ladder.pyTa5d6ff Ta5d6ff-mTa5d6ff Ta5d6fflive_validationTa5d6ff Ta5d6ff-kTa5d6ff Ta5d6ff"l0"Ta5d6ff Ta5d6ff-qTa5d6ff Ta5d6ff--tb=short
Tff7b72test:quick:feTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffFrontendTa5d6ff Ta5d6ffregressionTa5d6ff Ta5d6ffsubsetTa5d6ff Ta5d6ff(links,Ta5d6ff Ta5d6ffmicronTa5d6ff Ta5d6ffpreview,Ta5d6ff Ta5d6ffstrangerTa5d6ff Ta5d6ffbanner,Ta5d6ff Ta5d6ffinterfaceTa5d6ff Ta5d6ffstats)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tb4b4b4>Tb4b4b4-
Tff7b72{{.NPM}} exec vitest run
Tff7b72tests/frontend/NomadRichHtmlLinks.test.js
Tff7b72tests/frontend/InterfacesPage.stats.test.js
Tb4b4b4- Tb4b4b4>Tb4b4b4-
Tff7b72{{.NPM}} exec vitest run
Tff7b72tests/frontend/MicronEditorPage.test.js
Tff7b72-t "onPreviewClick opens http"
Tb4b4b4- Tb4b4b4>Tb4b4b4-
Tff7b72{{.NPM}} exec vitest run
Tff7b72tests/frontend/ConversationViewer.test.js
Tff7b72-t "addStrangerAsContact"
Tff7b72test:backendTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3testTb4b4b4:Te6edf3beTb4b4b4, Te6edf3testTb4b4b4:Te6edf3beTb4b4b4:Te6edf3fullTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffPythonTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ff(pytest,Ta5d6ff Ta5d6ffincludesTa5d6ff Ta5d6ffperf/memoryTa5d6ff Ta5d6ffprofiling,Ta5d6ff Ta5d6ffsameTa5d6ff Ta5d6ffasTa5d6ff Ta5d6ffGitHubTa5d6ff Ta5d6ffCI)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpytestTa5d6ff Ta5d6fftests/backendTa5d6ff Ta5d6ff-nTa5d6ff Ta5d6ffautoTa5d6ff Ta5d6ff{{.PYTEST_ARGSTa5d6ff Ta5d6ff|Ta5d6ff Ta5d6ffdefaultTa5d6ff Ta5d6ff""}}
Tff7b72test:be:covTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffPythonTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6ffdetailedTa5d6ff Ta5d6ffcoverageTa5d6ff Ta5d6ff(includesTa5d6ff Ta5d6ffperformanceTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffmemoryTa5d6ff Ta5d6ffprofilingTa5d6ff Ta5d6fftests)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpytestTa5d6ff Ta5d6fftests/backendTa5d6ff Ta5d6ff-nTa5d6ff Ta5d6ffautoTa5d6ff Ta5d6ff--cov=meshchatx/src/backendTa5d6ff Ta5d6ff--cov-report=term-missing
Tff7b72test:be:perfTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBackendTa5d6ff Ta5d6ffperformanceTa5d6ff Ta5d6ffregressionTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ffonlyTa5d6ff Ta5d6ff(hotTa5d6ff Ta5d6ffpathsTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6ffbottlenecks)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpytestTa5d6ff Ta5d6fftests/backend/test_performance_hotpaths.pyTa5d6ff Ta5d6fftests/backend/test_performance_bottlenecks.py
Tff7b72test:mutationTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffMutationTa5d6ff Ta5d6fftestingTa5d6ff Ta5d6ff(backendTa5d6ff Ta5d6ffmutmutTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffMeshMut,Ta5d6ff Ta5d6ffslow,Ta5d6ff Ta5d6ffoptional)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6fftaskTa5d6ff Ta5d6fftest:mutation:backend
Tb4b4b4- Ta5d6fftaskTa5d6ff Ta5d6fftest:mutation:frontend
Tff7b72test:mutation:backendTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBackendTa5d6ff Ta5d6ffmutationTa5d6ff Ta5d6fftestingTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6ffmutmutTa5d6ff Ta5d6ff(defaultTa5d6ff Ta5d6ffmeshchat_utils)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffbashTa5d6ff Ta5d6ffscripts/ci/mutation-backend.sh
Tff7b72test:mutation:frontendTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffFrontendTa5d6ff Ta5d6ffmutationTa5d6ff Ta5d6fftestingTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6ffin-repoTa5d6ff Ta5d6ffMeshMut
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffbashTa5d6ff Ta5d6ffscripts/ci/mutation-frontend.sh
Tff7b72test:mutation:frontend:sampleTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffQuickTa5d6ff Ta5d6ffMeshMutTa5d6ff Ta5d6ffsampleTa5d6ff Ta5d6ffonTa5d6ff Ta5d6ffCapabilities.jsTa5d6ff Ta5d6ff(cappedTa5d6ff Ta5d6ffmutants)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffnodeTa5d6ff Ta5d6ffscripts/mutation/run.mjsTa5d6ff Ta5d6ff--sourceTa5d6ff Ta5d6ffmeshchatx/src/frontend/js/rnode/Capabilities.jsTa5d6ff Ta5d6ff--max-per-fileTa5d6ff Ta5d6ff20
Tff7b72test:mutation:frontend:libsTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffMeshMutTa5d6ff Ta5d6ffonTa5d6ff Ta5d6ffmeshchatx/src/frontend/libsTa5d6ff Ta5d6ff(emitterTa5d6ff Ta5d6ffuuidTa5d6ff Ta5d6ffdatetimeTa5d6ff Ta5d6ffclickOutside)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tb4b4b4>Tb4b4b4-
Tff7b72node scripts/mutation/run.mjs
Tff7b72--source meshchatx/src/frontend/libs/emitter.js
Tff7b72--source meshchatx/src/frontend/libs/uuid.js
Tff7b72--source meshchatx/src/frontend/libs/datetime.js
Tff7b72--source meshchatx/src/frontend/libs/clickOutside.js
Tff7b72{{.CLI_ARGS}}
Tff7b72test:libsTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3testTb4b4b4:Te6edf3feTb4b4b4:Te6edf3libsTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffin-repoTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6fflibsTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6ffcoverageTa5d6ff Ta5d6ffgate
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tb4b4b4>Tb4b4b4-
Tff7b72{{.NPM}} exec vitest run
Tff7b72tests/frontend/libs.core.test.js
Tff7b72tests/frontend/libs.oracle.test.js
Tff7b72tests/frontend/libs.index.test.js
Tff7b72--coverage
Tff7b72--coverage.include=meshchatx/src/frontend/libs/**
Tb4b4b4- Ta5d6ffnodeTa5d6ff Ta5d6ffscripts/check-format-tokens.mjs
Tff7b72test:frontendTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3testTb4b4b4:Te6edf3feTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffshellTa5d6ff Ta5d6ffunitTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ff(vitest,Ta5d6ff Ta5d6ffexcludesTa5d6ff Ta5d6ffi18n,Ta5d6ff Ta5d6ffseeTa5d6ff Ta5d6fftest:lang,Ta5d6ff Ta5d6ffexcludesTa5d6ff Ta5d6ffLoadTimePerformance,Ta5d6ff Ta5d6ffuseTa5d6ff Ta5d6fftest:fe:loadtimeTa5d6ff Ta5d6fflocally)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffexecTe6edf3 Ta5d6ffvitestTe6edf3 Ta5d6ffrunTe6edf3 Ta5d6ff--excludeTe6edf3 Ta5d6fftests/frontend/LoadTimePerformance.test.jsTe6edf3 Ta5d6ff--excludeTe6edf3 Ta5d6fftests/frontend/i18n.test.jsTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffexecTe6edf3 Ta5d6ffvitestTe6edf3 Ta5d6ffrunTe6edf3 Ta5d6ff--configTe6edf3 Ta5d6ffvitest.electron.config.jsTa5d6ff"
Tff7b72test:fe:loadtimeTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffOptionalTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffload-timeTa5d6ff Ta5d6ff/Ta5d6ff Ta5d6ffsidebarTa5d6ff Ta5d6ffperformanceTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ff(notTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffinTa5d6ff Ta5d6ffCI)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6fftest:loadtimeTa5d6ff"
Tff7b72test:be:media-fuzzTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffHypothesisTa5d6ff Ta5d6fffuzzTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffstickers,Ta5d6ff Ta5d6ffTGS/LottieTa5d6ff Ta5d6ffJSON,Ta5d6ff Ta5d6ffWebM,Ta5d6ff Ta5d6ffGIFs,Ta5d6ff Ta5d6ffpackTa5d6ff Ta5d6ffexports
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpytestTa5d6ff Ta5d6fftests/backend/test_media_fuzzing.pyTa5d6ff Ta5d6ff-q
Tff7b72test:be:media-httpTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffaiohttpTa5d6ff Ta5d6ffintegrationTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ff/api/v1/stickers,Ta5d6ff Ta5d6ffsticker-packs,Ta5d6ff Ta5d6ffandTa5d6ff Ta5d6ff/api/v1/gifs
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpytestTa5d6ff Ta5d6fftests/backend/test_media_http_api.pyTa5d6ff Ta5d6ff-q
Tff7b72test:fuzz:allTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffVitestTa5d6ff Ta5d6fffuzzingTa5d6ff Ta5d6fftagTa5d6ff Ta5d6ffplusTa5d6ff Ta5d6ffbackendTa5d6ff Ta5d6ffmediaTa5d6ff Ta5d6ffHypothesisTa5d6ff Ta5d6fffuzz
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3testTb4b4b4:Te6edf3beTb4b4b4:Te6edf3media-fuzzTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6fftest:fuzzTa5d6ff"
Tff7b72test:fe:covTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6fflineTa5d6ff Ta5d6ffcoverageTa5d6ff Ta5d6ff(VitestTa5d6ff Ta5d6ffv8)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6fftest:coverageTa5d6ff"
Tff7b72test:langTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6fflocalizationTa5d6ff Ta5d6fftests
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffexecTe6edf3 Ta5d6ffvitestTe6edf3 Ta5d6ffrunTe6edf3 Ta5d6fftests/frontend/i18n.test.jsTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffuvTe6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffpytestTe6edf3 Ta5d6fftests/backend/test_translator_handler.pyTa5d6ff"
Tff7b72test:integrityTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffdataTa5d6ff Ta5d6ffintegrityTa5d6ff Ta5d6fftests
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpytestTa5d6ff Ta5d6fftests/backend/test_integrity.pyTa5d6ff Ta5d6fftests/backend/test_backend_integrity.py
Tff7b72test:covTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffallTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6ffcoverageTa5d6ff Ta5d6ff(PythonTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffJS/VueTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6fftranslatorTa5d6ff Ta5d6ffpytest)
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3testTb4b4b4:Te6edf3beTb4b4b4:Te6edf3covTb4b4b4, Te6edf3testTb4b4b4:Te6edf3feTb4b4b4:Te6edf3covTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ffuvTe6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffpytestTe6edf3 Ta5d6fftests/backend/test_translator_handler.pyTa5d6ff"
Tff7b72benchTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffDefaultTa5d6ff Ta5d6ffbenchmarkTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ff(backendTa5d6ff Ta5d6ffcomprehensiveTa5d6ff Ta5d6ffsuite,Ta5d6ff Ta5d6ffsameTa5d6ff Ta5d6ffasTa5d6ff Ta5d6ffbench:be)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6ffbench:be
Tff7b72bench:beTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffbackendTa5d6ff Ta5d6ffbenchmarks
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpythonTa5d6ff Ta5d6fftests/backend/run_comprehensive_benchmarks.py
Tff7b72bench:be:ciTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffbackendTa5d6ff Ta5d6ffbenchmarksTa5d6ff Ta5d6fftheTa5d6ff Ta5d6ffwayTa5d6ff Ta5d6ffCITa5d6ff Ta5d6ffdoesTa5d6ff Ta5d6ff(3Ta5d6ff Ta5d6ffsuiteTa5d6ff Ta5d6ffrunsTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6ffsmartTa5d6ff Ta5d6ffgate)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tb4b4b4>
Tff7b72uv run python tests/backend/run_comprehensive_benchmarks.py
Tff7b72--runs 3 --json-output bench_results.json
Tb4b4b4- Tb4b4b4>
Tff7b72uv run python tests/backend/compare_benchmarks.py
Tff7b72--current bench_results.json
Tff7b72--previous ./cache/benchmark-data.json
Tff7b72--baseline-out ./cache/benchmark-data.json
Tff7b72--summary bench_gate_summary.txt
Tff7b72bench:be:extremeTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffextremeTa5d6ff Ta5d6ffstressTa5d6ff Ta5d6ffbenchmarks
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpythonTa5d6ff Ta5d6fftests/backend/run_comprehensive_benchmarks.pyTa5d6ff Ta5d6ff--extreme
Tff7b72profile:memTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffmemoryTa5d6ff Ta5d6ffprofiling
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpytestTa5d6ff Ta5d6fftests/backend/test_memory_profiling.py
Tff7b72checkTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffFormat,Ta5d6ff Ta5d6fflint,Ta5d6ff Ta5d6ffandTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ffsequentiallyTa5d6ff Ta5d6ff(fullTa5d6ff Ta5d6ffpre-pushTa5d6ff Ta5d6ffgate)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6ffformat
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6fflint
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6fftest
Tff7b72compileTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffCompileTa5d6ff Ta5d6ffPythonTa5d6ff Ta5d6fftoTa5d6ff Ta5d6ffcheckTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffsyntaxTa5d6ff Ta5d6fferrors
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ffpythonTa5d6ff Ta5d6ff-mTa5d6ff Ta5d6ffcompileallTa5d6ff Ta5d6ffmeshchatx/
T8b949e# --- Build & Packaging ---
Tff7b72buildTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffprepareTa5d6ff Ta5d6ffbackend
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3allTb4b4b4]
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3installTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuildTa5d6ff"
Tff7b72build:frontendTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3feTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffassets
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3depsTb4b4b4:Te6edf3frontendTb4b4b4, Te6edf3buildTb4b4b4:Te6edf3visualiser-wasmTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-frontendTa5d6ff"
Tff7b72build:visualiser-wasmTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3viz-wasmTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffGoTa5d6ff Ta5d6ffnetworkTa5d6ff Ta5d6ffvisualiserTa5d6ff Ta5d6ffWASMTa5d6ff Ta5d6ffintoTa5d6ff Ta5d6fffrontendTa5d6ff Ta5d6ffpublicTa5d6ff Ta5d6ffvendor/
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffnodeTa5d6ff Ta5d6ffscripts/build-visualiser-wasm.mjs
Tff7b72test:visualiser-wasmTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3testTb4b4b4:Te6edf3viz-wasmTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffGoTa5d6ff Ta5d6ffunitTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffvisualiser-wasm
Tff7b72dirTb4b4b4: Ta5d6ffvisualiser-wasm
Tff7b72envTb4b4b4:
Tff7b72GOCACHETb4b4b4: Ta5d6ff"Ta5d6ff{{.ROOT_DIR}}/.gocacheTa5d6ff"
Tff7b72GOTMPDIRTb4b4b4: Ta5d6ff"Ta5d6ff{{.ROOT_DIR}}/.gotmpTa5d6ff"
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffmkdirTa5d6ff Ta5d6ff-pTa5d6ff Ta5d6ff"{{.ROOT_DIR}}/.gocache"Ta5d6ff Ta5d6ff"{{.ROOT_DIR}}/.gotmp"
Tb4b4b4- Ta5d6ffgoTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ff./internal/...
Tff7b72test:visualiser-wasm:raceTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3testTb4b4b4:Te6edf3viz-wasmTb4b4b4:Te6edf3raceTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffvisualiser-wasmTa5d6ff Ta5d6fftestsTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6fftheTa5d6ff Ta5d6ffraceTa5d6ff Ta5d6ffdetector
Tff7b72dirTb4b4b4: Ta5d6ffvisualiser-wasm
Tff7b72envTb4b4b4:
Tff7b72GOCACHETb4b4b4: Ta5d6ff"Ta5d6ff{{.ROOT_DIR}}/.gocacheTa5d6ff"
Tff7b72GOTMPDIRTb4b4b4: Ta5d6ff"Ta5d6ff{{.ROOT_DIR}}/.gotmpTa5d6ff"
Tff7b72CGO_ENABLEDTb4b4b4: Ta5d6ff"Ta5d6ff1Ta5d6ff"
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffmkdirTa5d6ff Ta5d6ff-pTa5d6ff Ta5d6ff"{{.ROOT_DIR}}/.gocache"Ta5d6ff Ta5d6ff"{{.ROOT_DIR}}/.gotmp"
Tb4b4b4- Ta5d6ffgoTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ff-raceTa5d6ff Ta5d6ff-count=1Ta5d6ff Ta5d6ff./internal/...
Tff7b72test:visualiser-wasm:fuzzTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3testTb4b4b4:Te6edf3viz-wasmTb4b4b4:Te6edf3fuzzTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffshortTa5d6ff Ta5d6ffvisualiser-wasmTa5d6ff Ta5d6fffuzzTa5d6ff Ta5d6fftargets
Tff7b72dirTb4b4b4: Ta5d6ffvisualiser-wasm
Tff7b72envTb4b4b4:
Tff7b72GOCACHETb4b4b4: Ta5d6ff"Ta5d6ff{{.ROOT_DIR}}/.gocacheTa5d6ff"
Tff7b72GOTMPDIRTb4b4b4: Ta5d6ff"Ta5d6ff{{.ROOT_DIR}}/.gotmpTa5d6ff"
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffmkdirTa5d6ff Ta5d6ff-pTa5d6ff Ta5d6ff"{{.ROOT_DIR}}/.gocache"Ta5d6ff Ta5d6ff"{{.ROOT_DIR}}/.gotmp"
Tb4b4b4- Ta5d6ffgoTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ff./internal/hashposTa5d6ff Ta5d6ff-fuzz=FuzzAngle01Ta5d6ff Ta5d6ff-fuzztime=5s
Tb4b4b4- Ta5d6ffgoTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ff./internal/filterTa5d6ff Ta5d6ff-fuzz=FuzzPathHashesWithinHopFilterTa5d6ff Ta5d6ff-fuzztime=5s
Tb4b4b4- Ta5d6ffgoTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ff./internal/filterTa5d6ff Ta5d6ff-fuzz=FuzzMatchesSearchTa5d6ff Ta5d6ff-fuzztime=3s
Tb4b4b4- Ta5d6ffgoTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ff./internal/iconTa5d6ff Ta5d6ff-fuzz=FuzzDedupeQueueEntriesTa5d6ff Ta5d6ff-fuzztime=5s
Tb4b4b4- Ta5d6ffgoTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ff./internal/lodTa5d6ff Ta5d6ff-fuzz=FuzzLevelFromScaleTa5d6ff Ta5d6ff-fuzztime=3s
Tb4b4b4- Ta5d6ffgoTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ff./internal/lodTa5d6ff Ta5d6ff-fuzz=FuzzComputeUpdatesTa5d6ff Ta5d6ff-fuzztime=5s
Tb4b4b4- Ta5d6ffgoTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ff./internal/graphTa5d6ff Ta5d6ff-fuzz=FuzzBuildPathGraphTa5d6ff Ta5d6ff-fuzztime=8s
Tff7b72bench:visualiser-wasmTb4b4b4:
Tff7b72aliasesTb4b4b4: Tb4b4b4[Te6edf3benchTb4b4b4:Te6edf3viz-wasmTb4b4b4]
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffvisualiser-wasmTa5d6ff Ta5d6ffbenchmarksTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6ffallocationTa5d6ff Ta5d6ffreporting
Tff7b72dirTb4b4b4: Ta5d6ffvisualiser-wasm
Tff7b72envTb4b4b4:
Tff7b72GOCACHETb4b4b4: Ta5d6ff"Ta5d6ff{{.ROOT_DIR}}/.gocacheTa5d6ff"
Tff7b72GOTMPDIRTb4b4b4: Ta5d6ff"Ta5d6ff{{.ROOT_DIR}}/.gotmpTa5d6ff"
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffmkdirTa5d6ff Ta5d6ff-pTa5d6ff Ta5d6ff"{{.ROOT_DIR}}/.gocache"Ta5d6ff Ta5d6ff"{{.ROOT_DIR}}/.gotmp"
Tb4b4b4- Ta5d6ffgoTa5d6ff Ta5d6fftestTa5d6ff Ta5d6ff./internal/...Ta5d6ff Ta5d6ff-run='^$'Ta5d6ff Ta5d6ff-bench=.Ta5d6ff Ta5d6ff-benchmemTa5d6ff Ta5d6ff-count=1
Tff7b72build:wheelTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffPythonTa5d6ff Ta5d6ffwheelTa5d6ff Ta5d6ffpackage
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3installTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffuvTa5d6ff Ta5d6ffbuildTa5d6ff Ta5d6ff--wheel
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.PYTHON}}Te6edf3 Ta5d6ffscripts/move_wheels.pyTa5d6ff"
T8b949e# --- Electron Distribution ---
Tff7b72dist:linux:appimageTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffLinuxTa5d6ff Ta5d6ffAppImageTa5d6ff Ta5d6ff(x64Ta5d6ff Ta5d6ff+Ta5d6ff Ta5d6ffarm64Ta5d6ff Ta5d6ffonly)
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffelectron-postinstallTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffPLATFORM=linuxTe6edf3 Ta5d6ffARCH=x64Te6edf3 Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-backendTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffpnpmTe6edf3 Ta5d6ffexecTe6edf3 Ta5d6ffelectron-builderTe6edf3 Ta5d6ff--linuxTe6edf3 Ta5d6ffAppImageTe6edf3 Ta5d6ff--x64Te6edf3 Ta5d6ff--publish=neverTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffPLATFORM=linuxTe6edf3 Ta5d6ffARCH=arm64Te6edf3 Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-backendTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffpnpmTe6edf3 Ta5d6ffexecTe6edf3 Ta5d6ffelectron-builderTe6edf3 Ta5d6ff--linuxTe6edf3 Ta5d6ffAppImageTe6edf3 Ta5d6ff--arm64Te6edf3 Ta5d6ff--publish=neverTa5d6ff"
Tff7b72dist:linux:arm64Tb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffLinuxTa5d6ff Ta5d6ffarm64Ta5d6ff Ta5d6ffAppImage
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffelectron-postinstallTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffPLATFORM=linuxTe6edf3 Ta5d6ffARCH=arm64Te6edf3 Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-backendTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffdistTe6edf3 Ta5d6ff--Te6edf3 Ta5d6ff--linuxTe6edf3 Ta5d6ffAppImageTe6edf3 Ta5d6ff--arm64Ta5d6ff"
Tff7b72dist:win:exeTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffWindowsTa5d6ff Ta5d6ffportableTa5d6ff Ta5d6ffEXE
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffelectron-postinstallTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffPLATFORM=win32Te6edf3 Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-backendTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffdistTe6edf3 Ta5d6ff--Te6edf3 Ta5d6ff--winTe6edf3 Ta5d6ffportableTa5d6ff"
Tff7b72dist:win:arm64Tb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffWindowsTa5d6ff Ta5d6ffarm64Ta5d6ff Ta5d6ffportableTa5d6ff Ta5d6ffEXE
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffelectron-postinstallTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffPLATFORM=win32Te6edf3 Ta5d6ffARCH=arm64Te6edf3 Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-backendTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffdistTe6edf3 Ta5d6ff--Te6edf3 Ta5d6ff--winTe6edf3 Ta5d6ffportableTe6edf3 Ta5d6ff--arm64Ta5d6ff"
Tff7b72dist:win:wineTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffWindowsTa5d6ff Ta5d6ffEXE/InstallerTa5d6ff Ta5d6ffviaTa5d6ff Ta5d6ffWine
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffelectron-postinstallTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffPLATFORM=win32Te6edf3 Ta5d6ffPYTHON_CMD='{{.WINE_PYTHON}}'Te6edf3 Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-backendTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffnpxTe6edf3 Ta5d6ffelectron-builderTe6edf3 Ta5d6ff--winTe6edf3 Ta5d6ffportableTe6edf3 Ta5d6ffnsisTe6edf3 Ta5d6ff--publish=neverTa5d6ff"
Tff7b72dist:fe:linuxTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffLinuxTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffappTa5d6ff Ta5d6ff(prebuiltTa5d6ff Ta5d6ffbackend)
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffdist:linuxTa5d6ff"
Tff7b72dist:linuxTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffAliasTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffdist:fe:linuxTa5d6ff Ta5d6ff(AppImageTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6ffdeb)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6ffdist:fe:linux
Tff7b72dist:linux-x64Tb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffLinuxTa5d6ff Ta5d6ffx64Ta5d6ff Ta5d6ffAppImageTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6ffdeb
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffdist:linux-x64Ta5d6ff"
Tff7b72dist:fe:rpmTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffRPMTa5d6ff Ta5d6ffpackage
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffdist:rpmTa5d6ff"
Tff7b72dist:fe:flatpakTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffFlatpakTa5d6ff Ta5d6ffpackage
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffdist:flatpakTa5d6ff"
Tff7b72dist:fe:winTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffWindowsTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffapps
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffdist:windowsTa5d6ff"
Tff7b72dist:fe:zipTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffZIPTa5d6ff Ta5d6ff(Linux)
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ffPLATFORM=linuxTe6edf3 Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-backendTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffdist:zipTa5d6ff"
Tff7b72dist:allTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffallTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffappsTa5d6ff Ta5d6ff(LinuxTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6ffWin)
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffelectron-postinstallTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffPLATFORM=linuxTe6edf3 Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-backendTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffPLATFORM=win32Te6edf3 Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-backendTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffdistTe6edf3 Ta5d6ff--Te6edf3 Ta5d6ff--linuxTe6edf3 Ta5d6ffAppImageTe6edf3 Ta5d6ffdebTe6edf3 Ta5d6ff--winTe6edf3 Ta5d6ffportableTe6edf3 Ta5d6ffnsisTa5d6ff"
Tff7b72dist:all:wineTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffallTa5d6ff Ta5d6ffElectronTa5d6ff Ta5d6ffappsTa5d6ff Ta5d6ff(LinuxTa5d6ff Ta5d6ff+Ta5d6ff Ta5d6ffWinTa5d6ff Ta5d6ffviaTa5d6ff Ta5d6ffWine)
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3frontendTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffelectron-postinstallTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffPLATFORM=linuxTe6edf3 Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-backendTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffPLATFORM=win32Te6edf3 Ta5d6ffPYTHON_CMD='{{.WINE_PYTHON}}'Te6edf3 Ta5d6ff{{.NPM}}Te6edf3 Ta5d6ffrunTe6edf3 Ta5d6ffbuild-backendTa5d6ff"
Tb4b4b4- Ta5d6ff"Ta5d6ffnpxTe6edf3 Ta5d6ffelectron-builderTe6edf3 Ta5d6ff--linuxTe6edf3 Ta5d6ffAppImageTe6edf3 Ta5d6ffdebTe6edf3 Ta5d6ff--winTe6edf3 Ta5d6ffportableTe6edf3 Ta5d6ffnsisTe6edf3 Ta5d6ff--publish=neverTa5d6ff"
T8b949e# --- Docker ---
Tff7b72docker:buildTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffDockerTa5d6ff Ta5d6ffimageTa5d6ff Ta5d6ff(buildx)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tb4b4b4|
Tff7b72if ! docker buildx inspect {{.DOCKER_BUILDER}} >/dev/null 2>&1; then
Tff7b72docker buildx create --name {{.DOCKER_BUILDER}} --use >/dev/null
Tff7b72else
Tff7b72docker buildx use {{.DOCKER_BUILDER}}
Tff7b72fi
Tb4b4b4- Tb4b4b4|
Tff7b72docker buildx build --builder {{.DOCKER_BUILDER}} --platform {{.DOCKER_PLATFORMS}} \
Tff7b72{{.DOCKER_BUILD_FLAGS}} \
Tff7b72-t {{.DOCKER_IMAGE}} \
Tff7b72{{.DOCKER_BUILD_ARGS}} \
Tff7b72-f {{.DOCKERFILE}} \
Tff7b72{{.DOCKER_CONTEXT}}
Tff7b72docker:runTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffDockerTa5d6ff Ta5d6ffcontainerTa5d6ff Ta5d6ff(compose)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff'Ta5d6ffMESHCHAT_IMAGE="{{.DOCKER_IMAGE}}"Te6edf3 Ta5d6ff{{.DOCKER_COMPOSE_CMD}}Te6edf3 Ta5d6ff-fTe6edf3 Ta5d6ff{{.DOCKER_COMPOSE_FILE}}Te6edf3 Ta5d6ffupTe6edf3 Ta5d6ff--remove-orphansTe6edf3 Ta5d6ff--pullTe6edf3 Ta5d6ffneverTe6edf3 Ta5d6ffreticulum-meshchatxTa5d6ff'
Tff7b72docker:run:devTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRunTa5d6ff Ta5d6ffDockerTa5d6ff Ta5d6ffcontainerTa5d6ff Ta5d6ff(devTa5d6ff Ta5d6ffcompose)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff'Ta5d6ffMESHCHAT_IMAGE="{{.DOCKER_IMAGE}}"Te6edf3 Ta5d6ff{{.DOCKER_COMPOSE_CMD}}Te6edf3 Ta5d6ff-fTe6edf3 Ta5d6ffdocker-compose.dev.ymlTe6edf3 Ta5d6ffupTe6edf3 Ta5d6ff--buildTe6edf3 Ta5d6ff--remove-orphansTe6edf3 Ta5d6ffreticulum-meshchatxTa5d6ff'
Tff7b72docker:build:envTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffcontainerizedTa5d6ff Ta5d6ffbuildTa5d6ff Ta5d6ffenvironment
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffdockerTa5d6ff Ta5d6ffbuildTa5d6ff Ta5d6ff-tTa5d6ff Ta5d6ff{{.DOCKER_BUILD_IMAGE}}Ta5d6ff Ta5d6ff-fTa5d6ff Ta5d6ff{{.DOCKER_BUILD_FILE}}Ta5d6ff Ta5d6ff.
Tff7b72docker:build:artifactsTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffexportTa5d6ff Ta5d6ffartifactsTa5d6ff Ta5d6fffromTa5d6ff Ta5d6ffcontainer
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffdockerTa5d6ff Ta5d6ffrmTa5d6ff Ta5d6ff-fTa5d6ff Ta5d6ffmeshchat-build-tempTa5d6ff Ta5d6ff||Ta5d6ff Ta5d6fftrue
Tb4b4b4- Ta5d6ffdockerTa5d6ff Ta5d6ffrunTa5d6ff Ta5d6ff--nameTa5d6ff Ta5d6ffmeshchat-build-tempTa5d6ff Ta5d6ff{{.DOCKER_BUILD_IMAGE}}
Tb4b4b4- Ta5d6ffmkdirTa5d6ff Ta5d6ff-pTa5d6ff Ta5d6ffdistTa5d6ff Ta5d6ffpython-dist
Tb4b4b4- Ta5d6ffdockerTa5d6ff Ta5d6ffcpTa5d6ff Ta5d6ffmeshchat-build-temp:/app/dist/.Ta5d6ff Ta5d6ff./dist/
Tb4b4b4- Ta5d6ffdockerTa5d6ff Ta5d6ffcpTa5d6ff Ta5d6ffmeshchat-build-temp:/app/python-dist/.Ta5d6ff Ta5d6ff./python-dist/
Tb4b4b4- Ta5d6ffdockerTa5d6ff Ta5d6ffrmTa5d6ff Ta5d6ffmeshchat-build-temp
T8b949e# --- Android ---
Tff7b72android:initTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffInitializeTa5d6ff Ta5d6ffGradleTa5d6ff Ta5d6ffwrapper
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tb4b4b4|
Tff7b72if [ ! -f "{{.ANDROID_DIR}}/gradle/wrapper/gradle-wrapper.jar" ]; then
Tff7b72echo "Downloading Gradle wrapper jar..."
Tff7b72mkdir -p "{{.ANDROID_DIR}}/gradle/wrapper"
Tff7b72curl -L -o "{{.ANDROID_DIR}}/gradle/wrapper/gradle-wrapper.jar" \
Tff7b72https://raw.githubusercontent.com/gradle/gradle/v8.12.1/gradle/wrapper/gradle-wrapper.jar || \
Tff7b72echo "Failed to download. Please run: cd {{.ANDROID_DIR}} && gradle wrapper --gradle-version 8.12.1"
Tff7b72else
Tff7b72echo "Gradle wrapper already initialized."
Tff7b72fi
Tff7b72android:prepareTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffPrepareTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffsourceTa5d6ff Ta5d6ffassets
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3buildTb4b4b4:Te6edf3feTb4b4b4, Te6edf3androidTb4b4b4:Te6edf3initTb4b4b4]
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tb4b4b4|
Tff7b72echo "Preparing Android assets..."
Tff7b72mkdir -p "{{.PYTHON_SRC_DIR}}"
Tff7b72rm -rf "{{.PYTHON_SRC_DIR}}/meshchatx"
Tff7b72echo "MeshChatX Python tree is synced by Gradle into app/src/main/python/meshchatx (see android/app/build.gradle)."
Tff7b72android:wheelsTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6fftheTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ff(Chaquopy)Ta5d6ff Ta5d6ffwheelsTa5d6ff Ta5d6ffintoTa5d6ff Ta5d6ffandroid/vendor/.Ta5d6ff Ta5d6ffMirrorsTa5d6ff Ta5d6ffCI.
Tff7b72varsTb4b4b4:
Tff7b72ANDROID_WHEEL_PYTHONTb4b4b4: Ta5d6ff'Ta5d6ff{{.ANDROID_WHEEL_PYTHONTe6edf3 Ta5d6ff|Te6edf3 Ta5d6ffdefaultTe6edf3 Ta5d6ff"3.11"}}Ta5d6ff'
Tff7b72ANDROID_WHEEL_ABISTb4b4b4: Ta5d6ff'Ta5d6ff{{.ANDROID_WHEEL_ABISTe6edf3 Ta5d6ff|Te6edf3 Ta5d6ffdefaultTe6edf3 Ta5d6ff"arm64-v8a,x86_64,armeabi-v7a"}}Ta5d6ff'
Tff7b72ANDROID_WHEEL_CHAQUOPY_REFTb4b4b4: Ta5d6ff'Ta5d6ff{{.ANDROID_WHEEL_CHAQUOPY_REFTe6edf3 Ta5d6ff|Te6edf3 Ta5d6ffdefaultTe6edf3 Ta5d6ff"9f563f45108a873d7feb363e1f754c0173f1114e"}}Ta5d6ff'
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tb4b4b4|
Tff7b72bash scripts/build-android-wheels-local.sh \
Tff7b72--python-minor "{{.ANDROID_WHEEL_PYTHON}}" \
Tff7b72--chaquopy-ref "{{.ANDROID_WHEEL_CHAQUOPY_REF}}" \
Tff7b72--abis "{{.ANDROID_WHEEL_ABIS}}"
Tff7b72android:buildTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffDebugTa5d6ff Ta5d6ffAPKTa5d6ff Ta5d6ff(universalTa5d6ff Ta5d6ffABITa5d6ff Ta5d6ffpackaging,Ta5d6ff Ta5d6ffarm64-v8aTa5d6ff Ta5d6ffonlyTa5d6ff Ta5d6ffunlessTa5d6ff Ta5d6ffoverridden)
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3androidTb4b4b4:Te6edf3prepareTb4b4b4]
Tff7b72varsTb4b4b4:
Tff7b72MESHCHATX_ABISTb4b4b4: Ta5d6ff'Ta5d6ff{{.MESHCHATX_ABISTe6edf3 Ta5d6ff|Te6edf3 Ta5d6ffdefaultTe6edf3 Ta5d6ff"arm64-v8a"}}Ta5d6ff'
Tff7b72MESHCHATX_ABI_PACKAGINGTb4b4b4: Ta5d6ff'Ta5d6ff{{.MESHCHATX_ABI_PACKAGINGTe6edf3 Ta5d6ff|Te6edf3 Ta5d6ffdefaultTe6edf3 Ta5d6ff"universal"}}Ta5d6ff'
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffcdTa5d6ff Ta5d6ff"{{.ANDROID_DIR}}"Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ff./gradlewTa5d6ff Ta5d6ff:app:assembleDebugTa5d6ff Ta5d6ff-PmeshchatxAbis={{.MESHCHATX_ABIS}}Ta5d6ff Ta5d6ff-PmeshchatxAbiPackaging={{.MESHCHATX_ABI_PACKAGING}}
Tff7b72android:build:releaseTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffReleaseTa5d6ff Ta5d6ffAPKTa5d6ff Ta5d6ff(sameTa5d6ff Ta5d6ffABITa5d6ff Ta5d6ffdefaultsTa5d6ff Ta5d6ffasTa5d6ff Ta5d6ffandroid:buildTa5d6ff Ta5d6ffunlessTa5d6ff Ta5d6ffoverridden)
Tff7b72depsTb4b4b4: Tb4b4b4[Te6edf3androidTb4b4b4:Te6edf3prepareTb4b4b4]
Tff7b72varsTb4b4b4:
Tff7b72MESHCHATX_ABISTb4b4b4: Ta5d6ff'Ta5d6ff{{.MESHCHATX_ABISTe6edf3 Ta5d6ff|Te6edf3 Ta5d6ffdefaultTe6edf3 Ta5d6ff"arm64-v8a"}}Ta5d6ff'
Tff7b72MESHCHATX_ABI_PACKAGINGTb4b4b4: Ta5d6ff'Ta5d6ff{{.MESHCHATX_ABI_PACKAGINGTe6edf3 Ta5d6ff|Te6edf3 Ta5d6ffdefaultTe6edf3 Ta5d6ff"universal"}}Ta5d6ff'
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffcdTa5d6ff Ta5d6ff"{{.ANDROID_DIR}}"Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ff./gradlewTa5d6ff Ta5d6ff:app:assembleReleaseTa5d6ff Ta5d6ff-PmeshchatxAbis={{.MESHCHATX_ABIS}}Ta5d6ff Ta5d6ff-PmeshchatxAbiPackaging={{.MESHCHATX_ABI_PACKAGING}}
Tff7b72android:cleanTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffCleanTa5d6ff Ta5d6ffAndroidTa5d6ff Ta5d6ffartifacts
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffcdTa5d6ff Ta5d6ff"{{.ANDROID_DIR}}"Ta5d6ff Ta5d6ff&&Ta5d6ff Ta5d6ff./gradlewTa5d6ff Ta5d6ffclean
Tb4b4b4- Ta5d6ffrmTa5d6ff Ta5d6ff-rfTa5d6ff Ta5d6ff"{{.PYTHON_SRC_DIR}}/meshchatx"Ta5d6ff Ta5d6ff"{{.ANDROID_DIR}}/app/src/main/python/meshchatx"
Tff7b72tree-manifestTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffPrintTa5d6ff Ta5d6ffSHA-256Ta5d6ff Ta5d6ffinventoryTa5d6ff Ta5d6ffofTa5d6ff Ta5d6ffgit-trackedTa5d6ff Ta5d6fffilesTa5d6ff Ta5d6ff(excludesTa5d6ff Ta5d6ffmeshchatx.rsmTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffvendor/)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffshTa5d6ff Ta5d6ffscripts/ci/tree-manifest.shTa5d6ff Ta5d6ffgenerate
Tff7b72tree-rsm-signTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffSignTa5d6ff Ta5d6fftreeTa5d6ff Ta5d6ffinventoryTa5d6ff Ta5d6ffintoTa5d6ff Ta5d6ffmeshchatx.rsmTa5d6ff Ta5d6ff(requiresTa5d6ff Ta5d6ffRNS_ID_PATH)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffshTa5d6ff Ta5d6ffscripts/ci/sign-tree-rsm.sh
Tff7b72tree-rsm-verifyTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffVerifyTa5d6ff Ta5d6ffmeshchatx.rsmTa5d6ff Ta5d6ffsignatureTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffhashesTa5d6ff Ta5d6ff(warnTa5d6ff Ta5d6ffbyTa5d6ff Ta5d6ffdefault,Ta5d6ff Ta5d6ffRNS_TREE_VERIFY_STRICT=1Ta5d6ff Ta5d6fftoTa5d6ff Ta5d6fffail)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffshTa5d6ff Ta5d6ffscripts/ci/verify-tree-rsm.sh
Tff7b72hooks:installTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffEnableTa5d6ff Ta5d6fftrackedTa5d6ff Ta5d6ff.githooksTa5d6ff Ta5d6ff(pre-commitTa5d6ff Ta5d6ffresignsTa5d6ff Ta5d6ffmeshchatx.rsm)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffshTa5d6ff Ta5d6ffscripts/ci/install-git-hooks.sh
Tff7b72tree-workspace-cleanTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffRecheckTa5d6ff Ta5d6ffinventoryTa5d6ff Ta5d6ff(warnTa5d6ff Ta5d6ffbyTa5d6ff Ta5d6ffdefault,Ta5d6ff Ta5d6ffRNS_TREE_VERIFY_STRICT=1Ta5d6ff Ta5d6fftoTa5d6ff Ta5d6fffail)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffshTa5d6ff Ta5d6ffscripts/ci/verify-workspace-clean.shTa5d6ff Ta5d6ff"${RNS_INVENTORY_OUT:-/tmp/meshchatx-tree-inventory.txt}"
Tff7b72verify:package:frozenTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffFailTa5d6ff Ta5d6ffifTa5d6ff Ta5d6fffrozenTa5d6ff Ta5d6ffbackendTa5d6ff Ta5d6ffcontainsTa5d6ff Ta5d6ffforbiddenTa5d6ff Ta5d6ffbloatTa5d6ff Ta5d6ffpaths
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffbashTa5d6ff Ta5d6ffscripts/ci/verify-package-contents.shTa5d6ff Ta5d6fffrozenTa5d6ff Ta5d6ff"{{.CLI_ARGS}}"
Tff7b72verify:package:wheelTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffFailTa5d6ff Ta5d6ffifTa5d6ff Ta5d6ffPythonTa5d6ff Ta5d6ffwheelTa5d6ff Ta5d6ffcontainsTa5d6ff Ta5d6ffforbiddenTa5d6ff Ta5d6ffbloatTa5d6ff Ta5d6ffpaths
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffbashTa5d6ff Ta5d6ffscripts/ci/verify-package-contents.shTa5d6ff Ta5d6ffwheelTa5d6ff Ta5d6ff"{{.CLI_ARGS}}"
Tff7b72verify:package:dockerTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffFailTa5d6ff Ta5d6ffifTa5d6ff Ta5d6ffDockerTa5d6ff Ta5d6ffimageTa5d6ff Ta5d6ffcontainsTa5d6ff Ta5d6ffforbiddenTa5d6ff Ta5d6ffbloatTa5d6ff Ta5d6ffpathsTa5d6ff Ta5d6ff(passTa5d6ff Ta5d6ffimageTa5d6ff Ta5d6ffasTa5d6ff Ta5d6ffCLI_ARGS)
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffbashTa5d6ff Ta5d6ffscripts/ci/verify-package-contents.shTa5d6ff Ta5d6ffdockerTa5d6ff Ta5d6ff"{{.CLI_ARGS}}"
Tff7b72verify:package:smokeTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffSelf-testTa5d6ff Ta5d6fftheTa5d6ff Ta5d6ffpackageTa5d6ff Ta5d6ffbloatTa5d6ff Ta5d6ffcheckerTa5d6ff Ta5d6ffwithTa5d6ff Ta5d6fftempTa5d6ff Ta5d6fftrees
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffbashTa5d6ff Ta5d6ffscripts/ci/verify-package-contents-smoke.sh
T8b949e# --- Maintenance ---
Tff7b72distTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffAliasTa5d6ff Ta5d6ffforTa5d6ff Ta5d6ffdist:linux:appimage
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6ffdist:linux:appimage
Tff7b72cleanTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffNukeTa5d6ff Ta5d6ffallTa5d6ff Ta5d6ffbuildTa5d6ff Ta5d6ffartifactsTa5d6ff Ta5d6ffandTa5d6ff Ta5d6ffdependencies
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ffrmTa5d6ff Ta5d6ff-rfTa5d6ff Ta5d6ffnode_modulesTa5d6ff Ta5d6ffbuildTa5d6ff Ta5d6ffdistTa5d6ff Ta5d6ffpython-distTa5d6ff Ta5d6ffmeshchatx/publicTa5d6ff Ta5d6ffbuild-dirTa5d6ff Ta5d6ffout
Tb4b4b4- Tff7b72taskTb4b4b4: Ta5d6ffandroid:clean
Tff7b72locales:genTb4b4b4:
Tff7b72descTb4b4b4: Ta5d6ffGenerateTa5d6ff Ta5d6fflocalizationTa5d6ff Ta5d6fftemplate
Tff7b72cmdsTb4b4b4:
Tb4b4b4- Ta5d6ff"Ta5d6ff{{.PYTHON}}Te6edf3 Ta5d6ffscripts/generate_locale_template.pyTa5d6ff"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────